<?xml version="1.0"?>
<component name="org.nuxeo.audit.PageProviderService.contrib.override">

  <require>org.nuxeo.audit.PageProviderService.contrib</require>

  <extension point="providers" target="org.nuxeo.ecm.platform.query.api.PageProviderService">

    <genericPageProvider class="org.nuxeo.audit.provider.AuditPageProvider" name="EVENTS_VIEW">
      <property name="coreSession">#{documentManager}</property>
      <searchDocumentType>BasicAuditSearch</searchDocumentType>
      <whereClause>
        <predicate operator="BETWEEN" parameter="eventDate">
          <field name="startDate" schema="basicauditsearch"/>
          <field name="endDate" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="=" parameter="category">
          <field name="eventCategory" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="eventId">
          <field name="eventIds" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="=" parameter="principalName">
          <field name="principalName" schema="basicauditsearch"/>
        </predicate>
      </whereClause>
      <sort ascending="false" column="eventDate"/>
      <pageSize>10</pageSize>
      <maxPageSize>1000</maxPageSize>
    </genericPageProvider>

    <genericPageProvider class="org.nuxeo.audit.provider.AuditPageProvider" name="DOCUMENT_HISTORY_PROVIDER_OLD">
      <searchDocumentType>BasicAuditSearch</searchDocumentType>
      <whereClause>
        <fixedPart>
          docUUID = ?
        </fixedPart>
        <predicate operator="BETWEEN" parameter="eventDate">
          <field name="startDate" schema="basicauditsearch"/>
          <field name="endDate" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="category">
          <field name="eventCategories" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="eventId">
          <field name="eventIds" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="principalName">
          <field name="principalNames" schema="basicauditsearch"/>
        </predicate>
      </whereClause>
      <sort ascending="true" column="id"/>
      <pageSize>5</pageSize>
    </genericPageProvider>


    <genericPageProvider class="org.nuxeo.audit.provider.DocumentHistoryPageProvider" name="DOCUMENT_HISTORY_PROVIDER">
      <searchDocumentType>BasicAuditSearch</searchDocumentType>
      <whereClause>
        <predicate operator="BETWEEN" parameter="eventDate">
          <field name="startDate" schema="basicauditsearch"/>
          <field name="endDate" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="category">
          <field name="eventCategories" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="eventId">
          <field name="eventIds" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="principalName">
          <field name="principalNames" schema="basicauditsearch"/>
        </predicate>
      </whereClause>
      <sort ascending="false" column="eventDate"/>
      <pageSize>10</pageSize>
      <maxPageSize>1000</maxPageSize>
    </genericPageProvider>

    <genericPageProvider class="org.nuxeo.audit.provider.AuditPageProvider" name="ADMIN_HISTORY">
      <property name="coreSession"/>
      <searchDocumentType>BasicAuditSearch</searchDocumentType>
      <whereClause>
        <predicate operator="BETWEEN" parameter="eventDate">
          <field name="startDate" schema="basicauditsearch"/>
          <field name="endDate" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="=" parameter="category">
          <field name="eventCategory" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="IN" parameter="eventId">
          <field name="eventIds" schema="basicauditsearch"/>
        </predicate>
        <predicate operator="=" parameter="principalName">
          <field name="principalName" schema="basicauditsearch"/>
        </predicate>
      </whereClause>
      <sort ascending="false" column="eventDate"/>
      <pageSize>10</pageSize>
      <maxPageSize>1000</maxPageSize>
    </genericPageProvider>

    <genericPageProvider class="org.nuxeo.audit.provider.AuditPageProvider" name="LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER">
      <pattern>
        SELECT * FROM LogEntry WHERE category = 'userGroup' AND eventId IN ('user_created', 'group_created')
      </pattern>
      <sort ascending="false" column="eventDate"/>
      <pageSize>5</pageSize>
      <maxPageSize>100</maxPageSize>
    </genericPageProvider>

    <genericPageProvider class="org.nuxeo.audit.provider.LatestCreatedUsersOrGroupsPageProvider" name="LATEST_CREATED_USERS_OR_GROUPS_PROVIDER">
    </genericPageProvider>

  </extension>

</component>
